/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import controle.GerenciadorArquivos;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Marcos Vinicius Rogowski
 */
public class ProdutoDAO implements OperacoesDAO {

    private ArrayList<Produto> produtos = new ArrayList();
     private static ProdutoDAO instancia = null;
    
    public static ProdutoDAO newInstance(){
        if (instancia == null){
            instancia = new ProdutoDAO();
        }
        return instancia;
    }

    private ProdutoDAO() {
        if (produtos.isEmpty()) {
            Object obj = GerenciadorArquivos.lerDados("produtos.dat");
            if (obj instanceof ArrayList) {
                produtos = (ArrayList) obj;
            }
        }
    }

    /*
     * @param obj é o disco que será inserido
     */
    @Override
    public void inserir(Object obj) {
        if (obj instanceof Produto) {
            Produto d = (Produto) obj;
            produtos.add(d);
        }
    }

    /*
     * @param obj é titulo
     * @return false se não há o que excluir
     */
    @Override
    public boolean excluir(Object obj) {
        boolean achou = false;
        ArrayList pesquisa = pesquisar(obj);
        if (pesquisa.size() != 0) { //Encontrou alguma coisa
            produtos.removeAll(pesquisa);
            achou = true;
        }
        return achou;
    }

    /*
     * @param obj é o disco com as informações alteradas exceto título
     */
    @Override
    public void editar(Object obj) {
        if (obj instanceof Produto) {
            Produto p = (Produto) obj;
            int chave = p.getIdProduto();
            for (int i = 0; i < produtos.size(); i++) {
                Produto achou = produtos.get(i);
                if (chave == achou.getIdProduto()) {
                    produtos.set(i, p);
                }
            }
        }
    }

    @Override
    public ArrayList pequisar() {
        return produtos;
    }

    /*
     * @param obj é o critério de pesquisa (titulo) que tem que ser do tipo String
     * @return uma coleção de todos os discos encontrados
     */
    public ArrayList pesquisar(Object obj) {
        ArrayList<Produto> retorno = new ArrayList();
        if (obj instanceof String) {
            String chave = (String) obj;
            Iterator<Produto> it = produtos.iterator();
            while (it.hasNext()) {
                Produto d = it.next();
                if (chave.equalsIgnoreCase(d.getNome())) {
                    retorno.add(d);
                }
            }
        }
        return retorno;
    }
    
    public void finalizar(){
        GerenciadorArquivos.gravarDados("produtos.dat", produtos);
    }

    /*
     * Só para fins de teste 
     
    public static void main(String[] args) {
        Disco d1 = new Disco("azul", new Interprete("Carlos", Estilo.AXE), 10, 2001);
        Disco d2 = new Disco("amarelo", new Interprete("Luiza", Estilo.BLUES), 10, 2001);
        Disco d3 = new Disco("vermelho", new Interprete("Pedro", Estilo.COUNTRY), 10, 2001);
        Disco d4 = new Disco("amarelo", new Interprete("Luiza", Estilo.BLUES), 10, 2001);
        Disco d5 = new Disco("lilas", new Interprete("Joao", Estilo.FORRO), 10, 2001);

        DiscoDAO discoteca = new DiscoDAO();
        discoteca.inserir(d1);
        discoteca.inserir(d2);
        discoteca.inserir(d3);
        discoteca.inserir(d4);
        discoteca.inserir(d5);

        String cor="amarelo";
         boolean achou = discoteca.excluir(cor);
         if (achou) {
         ArrayList<Disco> pesquisa = discoteca.pequisar();
         Iterator it = pesquisa.iterator();
         System.out.println("Depos de excluir" + cor);
         while (it.hasNext()) {
         System.out.println(it.next());
         }
         } else {
         System.out.println("Não achou o " + cor);
         }

        d5.setAno(2013);
        discoteca.editar(d5);
        ArrayList<Disco> pesquisa = discoteca.pequisar();
        Iterator it = pesquisa.iterator();
        System.out.println("Depos de alterar d5");
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }*/
}
